﻿using FakeXieCheng.API.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Reflection;
using Newtonsoft.Json;


namespace FakeXieCheng.API.Database
{
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        {

        }

        /*
         * 哪些模型需要映射
         * 每个数据模型都需要一个Dbset，去映射数据库的表
         * 注意使用复数，代表数据库名称
         */
        public DbSet<TouristRoute> TouristRoutes { get; set; }
        public DbSet<TouristRoutePicture> TouristRoutePictures { get; set; }

        /*
         * 重写 DbContext 里的 OnModelCreating() 函数
         */
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<TouristRoute>().HasData(new TouristRoute()
            //{
            //    Id=Guid.NewGuid(),
            //    Title="CeshiTitle",
            //    Description="ShuoMing",
            //    CreateTime=DateTime.UtcNow
            //});

            /*
             * Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)  项目当前文件夹地址，引用的  using System.Reflection;
             */
            var touristRouteJsonData = File.ReadAllText(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"/Database/touristRoutesMockData.json");
            //新建旅游路线列表,这里提到了 反序列化
            IList<TouristRoute> touristRoutes = JsonConvert.DeserializeObject<IList<TouristRoute>>(touristRouteJsonData);
            modelBuilder.Entity<TouristRoute>().HasData(touristRoutes);

            var touristRoutePictureJsonData = File.ReadAllText(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"/Database/touristRoutePicturesMockData.json");
            //新建旅游路线列表,这里提到了 反序列化
            IList<TouristRoutePicture> touristRoutePictures = JsonConvert.DeserializeObject<IList<TouristRoutePicture>>(touristRoutePictureJsonData);
            modelBuilder.Entity<TouristRoutePicture>().HasData(touristRoutePictures);

            /*modelBuilder 在创建数据模型和数据库表关系的时候，补充说明用的 ；初始化种子数据  */
            base.OnModelCreating(modelBuilder);
        }
    }
}
